/**
 * 调用者类 - 命令模式中的调用者
 * 
 * 要求命令对象执行请求，通常持有一个命令对象的引用
 * 可能还会保存多个命令对象，用于支持可撤销的操作
 */
package com.mkx.behaviorals.command;

import java.util.ArrayList;
import java.util.List;

public class Invoker {
    // 当前命令
    private Command command;
    // 命令历史记录，用于撤销操作
    private List<Command> commandHistory = new ArrayList<>();
    
    /**
     * 设置命令
     * 
     * @param command 要执行的命令
     */
    public void setCommand(Command command) {
        this.command = command;
    }
    
    /**
     * 执行命令
     */
    public void executeCommand() {
        if (command != null) {
            command.execute();
            // 记录命令到历史记录中
            commandHistory.add(command);
        }
    }
    
    /**
     * 撤销最后一个命令
     */
    public void undoLastCommand() {
        if (!commandHistory.isEmpty()) {
            Command lastCommand = commandHistory.remove(commandHistory.size() - 1);
            lastCommand.undo();
        } else {
            System.out.println("没有可撤销的命令");
        }
    }
}